home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / COMM / BLOCKDRIVERS / c / driver
Text File  |  1994-08-11  |  3KB  |  92 lines

  1. /*                  _____________________________________________
  2.                   [>                                             <]
  3. Project           [> ARCterm VII                                 <]
  4. Author            [> Hugo Fiennes                                <]
  5. Date started      [> 05-March-1990                               <]
  6.                   [>                                             <]
  7. Module name       [> Driver loading                              <]
  8. Current version   [> 00.04                                       <]
  9. Version date      [> 09-December-1992                            <]
  10. State             [> Unfinished                                  <]
  11.                   [>                                             <]
  12.                   [>    This source is COPYRIGHT © 1992 by       <]
  13.                   [>      Hugo Fiennes of The Serial Port        <]
  14.                   [>_____________________________________________<]
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include "driver.h"
  20. #include "os.h"
  21.  
  22. int  (*driver)(int,...);
  23. int  *driver_speedtable,driver_flags,driver_version,driver_noofspeeds;
  24. char *driver_info,*driver_creator;
  25. drivers_block drivers[16];
  26.  
  27. extern int driver_block[];
  28.  
  29. void driver_init()
  30.   {
  31.   os_gbpbstr r; char drivername[20],temp[60];
  32.   int nd=0;
  33.   FILE *drvcheck;
  34.  
  35.   /* Build table of availiable drivers */
  36.   /* Scan directory */
  37.   r.action=9;
  38.   r.file_handle=(int)"<SerialDev$Path>Modules";
  39.   r.data_addr=drivername;
  40.   r.seq_point=0; r.buf_len=20;
  41.   r.wild_fld=NULL;
  42.  
  43.   do
  44.     {
  45.     r.number=1; os_gbpb(&r);
  46.     if (r.number)
  47.       {
  48.       /* Got filename, check driver */
  49.       sprintf(temp,"<SerialDev$Path>Modules.%s.Driver",drivername);
  50.       if ((drvcheck=fopen(temp,"rb"))!=NULL)
  51.         {
  52.         strcpy(drivers[nd].file,drivername);
  53.         fseek(drvcheck,0x80,SEEK_SET);
  54.         fread(drivers[nd].info,1,32,drvcheck);
  55.         fseek(drvcheck,0xc8,SEEK_SET);
  56.         fread(&drivers[nd++].number,1,4,drvcheck);
  57.         fclose(drvcheck);
  58.         }
  59.       }
  60.     }
  61.   while(r.seq_point>=0);
  62.  
  63.   /* Terminate list */
  64.   drivers[nd].info[0]=0;
  65.   }
  66.  
  67. void *driver_load(char *drivername)
  68.   {
  69.   FILE *drv; long len; char temp[60];
  70.  
  71.   sprintf(temp,"<SerialDev$Path>Modules.%s.Driver",drivername);
  72.   if ((drv=fopen(temp,"rb"))==NULL) return(NULL);
  73.   fseek(drv,0,SEEK_END);
  74.   len=ftell(drv);
  75.   fseek(drv,0,SEEK_SET);
  76.   fread(driver_block,1,len,drv);
  77.   fclose(drv);
  78.  
  79.   /* NOTE! Should really call initialise entry before checking ANY of the below */
  80.   driver_flags=driver_block[49];
  81.   driver_version=driver_block[48];
  82.   driver_speedtable=&driver_block[64];
  83.   driver_info=(char*)&driver_block[32];
  84.   driver_creator=(char*)&driver_block[40];
  85.  
  86.   driver_noofspeeds=0;
  87.   while(driver_speedtable[driver_noofspeeds++]);
  88.   driver_noofspeeds--;
  89.  
  90.   return(driver_block);
  91.   }
  92.